#include "modbuswig.h"
#include "ui_modbuswig.h"
#include "mqtt/qmqtt.h"
#include "globalval.h"

#include "modbuswig.h"
#include <QRegExp>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
ModbusWig::ModbusWig(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ModbusWig)
{
    ui->setupUi(this);
}

ModbusWig::~ModbusWig()
{
    delete ui;
}


/*-----------------订阅主题处理---------------------------*/
void ModbusWig::modbusDataUpSlot(QByteArray jsonData) {
    qDebug() << "-------modbus进入处理---------";

    QJsonDocument doc = QJsonDocument::fromJson(jsonData);
    if (doc.isNull() || doc.isEmpty()) {
        qDebug() << "-----modbus数据解析失败--------";
        return;
    }

    if (doc.isObject()) {
        QJsonObject obj = doc.object();
        if (obj.contains("data") && obj["data"].isArray()) {
            QJsonArray dataArray = obj["data"].toArray();

            for (int i = 0; i < dataArray.size(); ++i) {
                const QJsonValue &item = dataArray.at(i);
                if (item.isObject()) {
                    QJsonObject sensor = item.toObject();
                    int key = sensor["key"].toInt();
                    QString valStr = sensor["val"].toString();

                    switch (key) {
                    case 101: { /*红外人体*/ if(valStr == "true"){qDebug()<<"有人";} else if(valStr == "false") { qDebug()<<"没人";}  break;}
                    case 102:{ /*蜂鸣器报警*/  if(valStr == "true"){qDebug()<<"警报";} else if(valStr == "false") { qDebug()<<"正常";} break; }
                    case 103:{ /*灯*/ if(valStr == "ture"){qDebug()<<"开灯";} else if(valStr == "false") { qDebug()<<"关灯";} break;}
                    case 104: { qDebug()<<"温度是:"<<valStr<<"℃";/* 温度处理 */ break; }
                    case 105: { qDebug()<<"湿度是:"<<valStr<<"%";/* 湿度处理 */ break; }
                    case 106:{ /*风机*/ if(valStr == "true"){qDebug()<<"打开风机";} else if(valStr == "false") { qDebug()<<"关闭风机";} break;}
                    case 107:{ /*水泵*/ if(valStr == "true"){qDebug()<<"打开水泵";} else if(valStr == "false") { qDebug()<<"关闭水泵";} break;}
                    case 108:{ /*火焰传感*/ if(valStr == "true"){qDebug()<<"着火";} else if(valStr == "false") { qDebug()<<"没火焰";} break;}
                    case 109:{qDebug()<<"空气质量:"<<valStr;/*空气质量*/ break;}
                        // ... 其他 case ...
                        default: break;
                    }



                }
            }
        }
    }
    dataDownSlot("101","true","app/data/down");
}


/*----------------------发布主题处理------------------------*/
//功能：实现数据的下发
//参数：
//      @key：要设置的设备的key值
//      @val：要下发的设备的控制指令，如true\false
//      @topic：要发布的主题
//返回值 无
void ModbusWig::dataDownSlot(QString key,QString val,QString topic ){
    //创建json数据
    QJsonObject jsonData;

    jsonData["key"] = key;
    jsonData["val"] = val;

    //转化为JSON字符串·
    QJsonDocument jsonDoc(jsonData);
    QByteArray payload = jsonDoc.toJson(QJsonDocument::Compact);

    //发布消息
    QMQTT::Message message;
    message.setTopic(topic);
    message.setPayload(payload);

    quint16 messageId = GlobalVal::mqtt->publish(message);
}
